Exercises 80 and 81 From How To Design Programs
My responses for Exercises 80 and 81 (Chapter 5.8) of How to Design Programs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#lang typed/racket ; A 3d point structure ; r3 : Number Number Number -> r3 ; r3 : Number -> Number -> Number -> r3 (require typed/rackunit) (struct r3 ([x : Number] [y : Number] [z : Number])) (define ex1 (r3 3 4 0)) (define ex2 (r3 2 10 11)) (: distance-to-origin (r3 -> Number)) (define (distance-to-origin r) (sqrt (+ (sqr (r3-x r)) (sqr (r3-y r)) (sqr (r3-z r))))) (check-equal? (distance-to-origin ex1) 5 "distance-to-origin is not as expected") (check-equal? (distance-to-origin ex2) 15 "distance-to-origin is not as expected") ; 5.8 Exercise 80 ; movie is (movie String String Number) (struct movie ([title : String] [producer : String] [year : Number])) ; movie-produced-by? : movie -> Boolean (: movie-produced-by? (-> movie String Boolean)) (define (movie-produced-by? movie producer-name) (string=? (movie-producer movie) producer-name)) (define star-wars (movie "Star Wars" "George Lucas" 1977)) (define was-produced-by-Lucas (movie-produced-by? star-wars "George Lucas")) (check-equal? (movie-produced-by? star-wars "George Lucas") #t) (check-equal? (movie-produced-by? star-wars "Steven Spielberg") #f) ; check-pred seems more appropriate here but it doesn't seem to play well with TR. ; 5.8 Exercise 81 ;time-since-midnight is (time-since-midnight Number Number Number) (struct time-since-midnight ([hour : Number] [minute : Number] [second : Number])) ; Take TIME-SINCE-MIDNIGHT and return equivalent number of seconds ; time-since-midnight -> seconds ; (: time->seconds (-> time-since-midnight Number)) (define (time->seconds time) (+ (* (time-since-midnight-hour time) 3600) (* (time-since-midnight-minute time) 60) (time-since-midnight-second time))) (check-equal? (time->seconds (time-since-midnight 0 23 30)) 1410) (check-equal? (time->seconds (time-since-midnight 10 12 25)) 36745) |
Again, not restricting myself to BSL (even though that’s what they use in HtDP). Hence I’m using RackUnit for my unit testing and Typed Racket to do some type checking.